Inter-Integrated Circuit (I2C) is a multi-master, serial, single-ended computer bus used for attaching low-speed peripherals to a motherboard, embedded system, mobile device or other electronic device. I2C uses two bidirectional open-drain lines, Serial Data Line (SDA) and Serial Clock (SCL), pulled up with resistors. Nodes on the bus can have a master or slave role.
I2C defines three basic types of messages, each of which begins with START and ends with STOP. These messages include: 1) single message where a master writes data to a slave; 2) single message where a master reads data from a slave; and 3) combined messages, where a master issues at least two reads and/or writes to one or more slaves.
System Management Bus (SMBus) is a single-ended two-wire bus derived from I2C serial bus protocol. The SMBus protocols are a subset of the data transfer formats defined in the I2C specifications. SMBus specifies that there must be a minimum hold time of 300 ns from the falling edge of SCL to data change SDA. This condition must be true for each bit in a transaction.
A common method used to generate a minimum hold time is to have a system clock run fast enough to synchronize SCL and provide a hold time using a counter. The drawbacks are that the system clock must run fast enough to provide the desired hold time.